package ar.com.algotres.tpdos.modelo.disparos;

import ar.com.algotres.tpdos.modelo.disparos.estrategias.EstrategiaDeImpacto;
import ar.com.algotres.tpdos.modelo.fisica.Posicion;
import ar.com.algotres.tpdos.modelo.tablero.ContenidoCasillero;
import ar.com.algotres.tpdos.modelo.tablero.Tablero;

public abstract class Disparo implements ContenidoCasillero {

	private EstrategiaDeImpacto estrategiaDeImpacto;
	protected Posicion posicion;
	protected int punto;

	protected Disparo(EstrategiaDeImpacto estrategiaDeImpacto) {
		super();
		this.estrategiaDeImpacto = estrategiaDeImpacto;
	}

	public int damePunto() {
		return punto;
	}

	public EstrategiaDeImpacto getEstrategiaDeImpacto() {
		return estrategiaDeImpacto;
	}

	public Posicion getPosicion() {
		return posicion;
	}

	public void impactarEn(Posicion posicion) {
		Tablero tablero = Tablero.getInstance();
		tablero.ponerDisparo(this);
		this.posicion = posicion;
	}

	@Override
	public String toString() {
		return "Disparo [" + posicion.toString() + ", punto=" + punto + "]";
	}

	public void vivir() throws PosicionAExplotarInvalidaExcpetion {
		this.getEstrategiaDeImpacto().impactarEn(posicion, this);
	}
}
